home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / UTILS / HSBASIC2.DMS / in.adf / HB2Examples1.3.Lha / Examples / IFF_ILBM / UnPackRow.s < prev   
Encoding:
Text File  |  1994-05-12  |  1.3 KB  |  74 lines

  1. *
  2. *    UnPackRow.s
  3. *    Unpack ILBM cmpByteRun1 commpression
  4. *    (c) Copyright HiSoft 1994
  5. *    Feel free to use the code produced by this in your old programs.
  6.  
  7.             opt    alink
  8. * unpackrow.s  Convert data from "cmpByteRun1" run compression
  9. * FUNCTION UnPackRow%(pSource&, pDest&, BYVAL srcBytes0&, BYVAL dstBytes0&,BYVAL result&)
  10.             
  11.         xdef    _unpackrow
  12.         rsset    4
  13. pSource        rs.l    1
  14. pDest        rs.l    1
  15. srcBytes    rs.l    1
  16. dstBytes    rs.l    1
  17. result        rs.l    1
  18.         
  19. _unpackrow
  20.         move.l    pSource(sp),a0
  21.         move.l    (a0),a0
  22.         move.l    pDest(sp),a1
  23.         move.l    (a1),a1
  24.         move.l    srcBytes(sp),d2    
  25.         move.l    dstBytes(sp),d3
  26. .toploop
  27.         ble    .end
  28.         dbf    d2,.ok
  29. .failed        moveq    #0,d0
  30.         move.l    result(sp),a0
  31.         clr.w    (a0)
  32.         rts
  33. .ok        move.b    (a0)+,d0
  34.         bmi.s    .notpos
  35.         ext.w    d0
  36.         add.w    #1,d0
  37.         sub.w    d0,d2
  38.         bmi.s    .failed
  39.         sub.w    d0,d3
  40.         bmi.s    .failed
  41.         subq.w    #1,d0        for dbf
  42. .nloop        move.b    (a0)+,(a1)+
  43.         dbf    d0,.nloop
  44.         bra.s    .mainloop
  45. .notpos        cmp.b    #$80,d0
  46.         beq.s    .128
  47. * its a run
  48.         neg.b    d0
  49.         ext.w    d0
  50.         addq.w    #1,d0
  51.         subq.w    #1,d2        decr srcBytes
  52.         bmi.s    .failed
  53.         sub.w    d0,d3
  54.         bmi.s    .failed
  55.         
  56.         move.b    (a0)+,d1    run data
  57.         subq.w    #1,d0        for dbf
  58. .runloop    move.b    d1,(a1)+
  59.         dbf    d0,.runloop
  60.         
  61. .128
  62. .mainloop
  63.         tst.w    d3
  64.         bra.s    .toploop
  65.  
  66. .end        move.l    pSource(sp),a2
  67.         move.l    a0,(a2)
  68.         move.l    pDest(sp),a2
  69.         move.l    a1,(a2)
  70.         moveq    #-1,d0    
  71.         move.l    result(sp),a0
  72.         move.w    d0,(a0)
  73.         rts
  74.